Java import java.util.Random; import java.math.*; public class MonteCarlo { static final int iter = 100000; static final int max_rep = 5000; /*I aware of the fact that such public variable declarations are bad for OO design.But for the sake of performance…*/ public static int in_region[]; public static Random r; public static void EstimatePI(int rep) { double x, y; int i, j; double mean = 0, var = 0, hl; for (j = 0; j < rep; j++) { in_region[j]=0; for (i = 0; i < iter; i++) { x = 2 * r.nextDouble() - 1; y = 2 * r.nextDouble() - 1; if (x * x + y * y <= 1) { in_region[j]++; } } mean += in_region[j] * 1.0 / rep; } if (rep > 1) { for (i = 0; i < rep; i++) { var += (in_region[i] - mean) * (in_region[i] - mean) / (rep - 1); } } mean = 4 * mean / iter; hl = 7.84 * Math.sqrt(var/rep) / iter; System.out.println("PI estimation is " + mean + " with half-length " + hl); } public static void main(String[] args) { MonteCarlo mc = new MonteCarlo(); mc.r=new Random(); mc.in_region = new int[mc.max_rep]; long start; for (int r = 1; r <= mc.max_rep; r *= 4) { start = System.currentTimeMillis(); MonteCarlo.EstimatePI(r); System.out.println("Response time is " + (System.currentTimeMillis() - start)/1000.0 + " sec."); System.out.println(); } } } C #include #include #include #include #define ITER 100000 #define MAX_REP 5000 int in_region[MAX_REP]; void EstimatePI(int rep){ int i,j; double mean=0,var=0,hl,x,y; srand(time(NULL)); for (j = 0; j < rep; j++) { in_region[j]=0; for (i = 0; i < ITER; i++) { x = 2.0 * rand()/RAND_MAX - 1; y = 2.0 * rand()/RAND_MAX - 1; if (x * x + y * y <= 1) { in_region[j]++; } } mean += in_region[j] * 1.0 / rep; } if (rep > 1) { for (i = 0; i < rep; i++) { var += (in_region[i] - mean) * (in_region[i] - mean) / (rep - 1); } } mean = 4 * mean / ITER; hl = 7.84 * sqrt(var/rep) / ITER; printf("PI estimation is %7.5lf with half-length %7.5lf\n",mean,hl); } int main(int argc, char* argv[]){ int r; unsigned int start; srand(time(NULL)); for (r = 1; r <= MAX_REP; r *= 4) { start = time(NULL); EstimatePI(r); printf("Response time is %d sec.\n\n",time(NULL) - start); } return 0; }